home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
t_os
/
sndadder
/
snd.c
< prev
next >
Wrap
Text File
|
1993-07-08
|
2KB
|
111 lines
/* SNDファイルくっつけちゃうよバカ野郎 *
* Copyright 1993 by Tetsuo O. *
* */
#pragma On(Align_labels) ;
#pragma On(486) ;
/* サイリックス
へっへーっ、Cx486DLCに付け替えっちゃたもんねーっ。
2Fなんだもんねー。HRとほぼ同等なんだもんねーっ。 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFFERSIZE 131072
int ext_malloc() ;
struct HEADDER {
char name[8] ;
unsigned int id ;
unsigned int width ;
unsigned int loop_start ;
unsigned int loop_length ;
unsigned short freq ;
unsigned short fix ;
unsigned char onkai ;
unsigned char flug ;
unsigned short dummy ;
} ;
int snd_adder(p,s1,s2,s3)
int *p ;
char *s1,*s2,*s3 ;
{
unsigned int i,j ;
struct HEADDER snd1 ;
struct HEADDER snd2 ;
struct HEADDER snd3 ;
FILE *fp1,*fp2,*out ;
char *buffer ;
char name1[80],name2[80],name3[80] ;
strcpy(name1,s1) ; strcat(name1,".snd") ;
strcpy(name2,s2) ; strcat(name2,".snd") ;
strcpy(name3,s3) ; strcat(name3,".snd") ;
i = *p = ext_malloc(buffer) ;
if ((fp1 = fopen(name1,"rb")) == NULL) {
free(buffer) ;
return 1 ;
}
if ((fp2 = fopen(name2,"rb")) == NULL) {
free(buffer) ;
return 1 ;
}
fread(&snd1,1,32,fp1) ; fread(&snd2,1,32,fp2) ;
if ((snd3.freq = snd1.freq) != snd2.freq) {
fclose(fp1) ; fclose(fp2) ; free(buffer) ;
return 3 ;
}
for (j=0; j<8; j++)
snd3.name[j] = snd1.name[j] ;
snd3.id = snd1.id ;
snd3.fix = snd1.fix ;
snd3.onkai = snd1.onkai ;
snd3.width = snd1.width + snd2.width ;
snd3.flug = snd3.dummy = snd3.loop_start = snd3.loop_length = 0 ;
if ((out = fopen(name3,"wb")) == NULL) {
fclose(fp1) ; fclose(fp2) ; free(buffer) ;
return 4 ;
}
fwrite(&snd3,1,32,out) ;
j = fread(buffer,sizeof(char),i,fp1) ;
while(j > 0) {
if (fwrite(buffer,1,j,out) < j) {
fclose(fp1) ; fclose(fp2) ; fclose(out) ;
free(buffer) ;
return 2 ;
}
j = fread(buffer,sizeof(char),i,fp1) ;
}
j = fread(buffer,sizeof(char),i,fp2) ;
while(j > 0) {
if (fwrite(buffer,1,j,out) < j) {
fclose(fp1) ; fclose(fp2) ; fclose(out) ;
free(buffer) ;
return 2 ;
}
j = fread(buffer,sizeof(char),i,fp2) ;
}
fclose(fp1) ; fclose(fp2) ; fclose(out) ;
free(buffer) ;
}
int ext_malloc(buf)
char *buf ;
{
int i ;
i = 0 ;
while((buf = malloc(i+BUFFERSIZE)) != NULL) {
free(buf) ;
i += BUFFERSIZE ;
}
return i ;
}